Some improvements to the auto-mnemonics code
authorMatthias Clasen <mclasen@redhat.com>
Sun, 20 Dec 2009 23:20:42 +0000 (18:20 -0500)
committerTristan Van Berkom <tristan.van.berkom@gmail.com>
Sun, 4 Apr 2010 00:53:36 +0000 (20:53 -0400)
gtk/gtkmain.c
gtk/gtkmenushell.c
gtk/gtkwindow.c

index af03f3578e68d848df54f9abed55fdefbcd36ad7..dfd517ac92ec7c84c7e48ffb14a245cafc4920c6 100644 (file)
@@ -1615,8 +1615,11 @@ gtk_main_do_event (GdkEvent *event)
          if (gtk_invoke_key_snoopers (grab_widget, event))
            break;
        }
-      /* catch alt press to enable auto-mnemonics */
-      if (event->key.keyval == GDK_Alt_L || event->key.keyval == GDK_Alt_R)
+      /* Catch alt press to enable auto-mnemonics;
+       * menus are handled elsewhere
+       */
+      if ((event->key.keyval == GDK_Alt_L || event->key.keyval == GDK_Alt_R) &&
+          !GTK_IS_MENU_SHELL (grab_widget))
         {
           gboolean auto_mnemonics;
 
index f5dbce80607db026edacdf2bbb2b9528d83e78e9..db3a9f92db38cc13ee08232ef11d2f89a6d6b02d 100644 (file)
@@ -831,8 +831,12 @@ _gtk_menu_shell_update_mnemonics (GtkMenuShell *menu_shell)
        * not in the entire window.
        */
       if (GTK_IS_MENU_BAR (target))
-        _gtk_label_mnemonics_visible_apply_recursively (GTK_WIDGET (target),
-                                                        mnemonics_visible);
+        {
+          gtk_window_set_mnemonics_visible (GTK_WINDOW (gtk_widget_get_toplevel (target)),
+                                            FALSE);
+          _gtk_label_mnemonics_visible_apply_recursively (GTK_WIDGET (target),
+                                                          mnemonics_visible);
+        }
       else
         gtk_window_set_mnemonics_visible (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (target))),
                                           mnemonics_visible);
index f5ec59ff4082ecffe3785b6d38ec5dbf2046c623..c70d6608579841a1dbc6b97be6891f35dd405195 100644 (file)
@@ -42,6 +42,7 @@
 #include "gtkkeyhash.h"
 #include "gtkmain.h"
 #include "gtkmnemonichash.h"
+#include "gtkmenubar.h"
 #include "gtkiconfactory.h"
 #include "gtkicontheme.h"
 #include "gtkmarshalers.h"
@@ -235,8 +236,6 @@ static gint gtk_window_client_event   (GtkWidget         *widget,
 static void gtk_window_check_resize       (GtkContainer      *container);
 static gint gtk_window_focus              (GtkWidget        *widget,
                                           GtkDirectionType  direction);
-static void gtk_window_grab_notify        (GtkWidget         *widget,
-                                           gboolean           was_grabbed);
 static void gtk_window_real_set_focus     (GtkWindow         *window,
                                           GtkWidget         *focus);
 
@@ -464,7 +463,6 @@ gtk_window_class_init (GtkWindowClass *klass)
   widget_class->client_event = gtk_window_client_event;
   widget_class->focus = gtk_window_focus;
   widget_class->expose_event = gtk_window_expose;
-  widget_class->grab_notify = gtk_window_grab_notify;
 
   container_class->check_resize = gtk_window_check_resize;
 
@@ -5332,7 +5330,6 @@ gtk_window_focus_out_event (GtkWidget     *widget,
   if (auto_mnemonics)
     gtk_window_set_mnemonics_visible (window, FALSE);
 
-
   return FALSE;
 }
 
@@ -8506,22 +8503,6 @@ gtk_window_set_mnemonics_visible (GtkWindow *window,
   priv->mnemonics_visible_set = TRUE;
 }
 
-static void
-gtk_window_grab_notify (GtkWidget *widget,
-                        gboolean   was_grabbed)
-{
-  gboolean auto_mnemonics;
-
-  if (was_grabbed)
-    return;
-
-  g_object_get (gtk_widget_get_settings (widget), "gtk-auto-mnemonics",
-                &auto_mnemonics, NULL);
-
- if (auto_mnemonics)
-   gtk_window_set_mnemonics_visible (GTK_WINDOW (widget), FALSE);
-}
-
 #if defined (G_OS_WIN32) && !defined (_WIN64)
 
 #undef gtk_window_set_icon_from_file